package Array;

public class SuperLink2 {
    private Node head;
    private Integer DQindex = -1; //记录当前下标

    //头插
    public void addToHead(int data) {
        this.add(0, data);
    }

    //尾插
    public void addToTail(int data) {
        this.add(DQindex++, data);
    }

    //在指定位置插入一个节点
    public void add(int index, int data) {
        if (head == null) {     //如果头没有 则新建一个头
            head = new Node(data, null);
        } else {
            if (index == 0) {       //在头的前面插入一个节点
                head = new Node(data, head);
            } else {
                Node node = this.selectnode(index - 1);
                Node newnode = new Node(data, node.getNext());
                node.setNext(newnode);
            }
        }
        DQindex++;
    }

    //指定位置查找一个节点
    public Node selectnode(int index) {
        Node node = head;
        for (int i = 0; i < index; i++) {
            node = node.getNext();
        }
        return node;
    }

    //查找某个下标的节点的值
    public int select(int index) {
        return this.selectnode(index).getData();
    }

    //删除某个节点
    public void del(int index) {
        if (index == 0) {
            head = head.getNext();
        } else {
            Node node = selectnode(index - 1);
            node.setNext(node.getNext().getNext());
        }
    }

    //修改一个下标的节点数据
    public void set(int index, int data) {
        Node node = selectnode(index);
        node.setData(data);
    }

    //打印整个链表
    public String print() {
        String res = "[";
        for (int i = 0; i <= DQindex; i++) {
            res += select(i) + ",";
        }
        return res.substring(0, res.length() - 1) + "]";
    }

    //第一种排序
    public void px() {
        for (int i = 0; i < DQindex; i++) {
            for (int j = 0; j < DQindex - i; j++) {
                if (select(j) > select(j + 1)) {
                    int temp = select(j);
                    selectnode(j).setData(select(j + 1));
                    selectnode(j + 1).setData(temp);
                }
            }
        }
    }

    //第二种排序
    public void px2() {
        for (int i = 0; i < DQindex; i++) {
            for (int j = 0; j < DQindex - i; j++) {
                Node node = selectnode(j);
                Node next = node.getNext();
                if (node.getData() > next.getData()) {
                    int temp = node.getData();
                    node.setData(next.getData());
                    next.setData(temp);
                }
            }
        }
    }


    public void px3() {
        for (int i = 0; i < DQindex; i++) {
            Node node = null;
            for (int j = 0; j < DQindex - i; j++) {
                if (j == 0) {
                    node = head;
                } else {
                    node = node.getNext();      //每次循环找下一个
                }

                Node next = node.getNext();
                if (node.getData() > next.getData()) {
                    int temp = node.getData();
                    node.setData(next.getData());
                    next.setData(temp);
                }
            }
        }
    }


}
